1.synchronized
--把代码块声明为 synchronized,有两个重要后果,通常是指该代码具有 原子性(atomicity)和 可见性(visibility)。1.1 原子性
--原子性意味着个时刻,只有一个线程能够执行一段代码,这段代码通过一个monitor object保护。从而防止多个线程在更新共享状态时相互冲突。
1.2 可见性
--可见性则更为微妙,它要对付内存缓存和编译器优化的各种反常行为。它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个
线程是可见的 。
1.3 作用:如果没有同步机制提供的这种可见性保证,线程看到的共享变量可能是修改前的值或不一致的值,这将引发许多严重问题。
2.synchronize的限制
synchronized是不错,但它并不完美。它有一些功能性的限制:--它无法中断一个正在等候获得锁的线程;
--也无法通过投票得到锁,如果不想等下去